package com.keke.beauty.sys.user.controller;

import java.util.Date;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.keke.beauty.sys.user.entity.SysUser;
import com.keke.beauty.sys.user.service.SysUserService;
import com.keke.beauty.utils.exception.RRException;
import com.keke.beauty.utils.pojo.Result;
import com.keke.beauty.utils.pojo.TableInfo;
import com.keke.beauty.utils.tools.ResultUtil;
/**
 * 用户控制层
 * @author 
 * @Data 2019年02月18日 10:01:13
 */
@RestController
@RequestMapping("/user")
public class SysUserController {
    
    @Autowired
    private SysUserService service;
    
    /**
     * 用户列表
     * @author 
     * @Data 2019年02月18日 10:01:13
     * @Date 2018年1月15日 下午2:29:08
     * @param tableInfo
     * @return
     * @throws Exception 
     */
    @GetMapping
    public Result getList(TableInfo<SysUser> tableInfo){
        PageHelper.startPage(tableInfo.getPageNum(), tableInfo.getPageSize());
        PageHelper.orderBy("create_time desc");
        PageInfo<SysUser> page = new PageInfo<SysUser>(service.getList(tableInfo.getSearch()));
        return ResultUtil.successTable(page);
    }
    
    
    /**
     * 保存用户
     * @author 
     * @Data 2019年02月18日 10:01:13
     * @param user
     * @return
     */
    @PostMapping
    public Result save(SysUser user){
        return ResultUtil.success(service.insert(user));
    }
	
    /**
     * 修改用户
     * @author 
     * @Data 2019年02月18日 10:01:13
     * @param user
     * @return
     */
    @PutMapping
    public Result edit(SysUser user){
        return ResultUtil.success(service.update(user));
    }
    
    /**
     * 删除用户
     * @author 
     * @Data 2019年02月18日 10:01:13
     * @param id
     * @return
     */
    @DeleteMapping
    public Result delete(@RequestParam int id){
        SysUser user = new SysUser();
        user.setId(id);
        user.setDel((short) 1);
		user.setModifyTime(new Date());
        service.update(user);
        return ResultUtil.success();
    }
	
    /**
     * 查看用户
     * @author 
     * @Data 2019年02月18日 10:01:13
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Result findById(@PathVariable int id) {
        return ResultUtil.success(service.findByPrimaryKey(id));
    }

    /**
     * 查看用户
     * @author
     * @Data 2019年02月18日 10:01:13
     * @param name
     * @return
     */
    @RequestMapping("/findByName/{name}")
    public Result findByName(@PathVariable String name) {
        return ResultUtil.success(service.findByName(name));
    }
    
    /**
     * 功能描述：美容院列表
     * 作者：张进
     * 创建时间：2019年2月20日 上午11:35:34
     * @param tableInfo
     * @return
     */
    @GetMapping("beauty")
    public Result getBeauty(TableInfo<SysUser> tableInfo){
        SysUser sysUser = (SysUser) SecurityUtils.getSubject().getPrincipal();
        Integer userId = null;
        if(sysUser.getType() == 2){
            userId = sysUser.getId();
        }
        PageHelper.startPage(tableInfo.getPageNum(), tableInfo.getPageSize());
        PageHelper.orderBy("create_time desc");
        PageInfo<SysUser> page = new PageInfo<SysUser>(service.getList(tableInfo.getSearch(), userId));
        return ResultUtil.successTable(page);
    }



    /**
     * 保存美容院
     * @author 
     * @Data 2019年02月18日 10:01:13
     * @param user
     * @return
     */
    @PostMapping("beauty")
    public Result saveBeauty(SysUser user){
        SysUser sysUser = (SysUser) SecurityUtils.getSubject().getPrincipal();
        
        user.setType((short) 2);
        Object simpleHash = new SimpleHash("MD5", user.getPassword(), ByteSource.Util.bytes(user.getUsername()), 2);
        user.setPassword(simpleHash.toString());
        user.setCreater(sysUser.getId());
        user.setCreateTime(new Date());
        return ResultUtil.success(service.insert(user));
    }


    /**
     * 功能描述：重置密码
     * 创建时间：2019年2月28日 下午9:27:47
     * @param id
     * @param resetPass
     * @return
     */
    @PostMapping("resetPass")
    public Result resetPass(@RequestParam Integer id, @RequestParam String name, @RequestParam String resetPass){
        SysUser sysUser = (SysUser) SecurityUtils.getSubject().getPrincipal();
        if(sysUser.getType() != 0){
            throw new RRException("你无权限！");
        }
        
        SysUser user = new SysUser();
        Object simpleHash = new SimpleHash("MD5", resetPass, name, 2);
        user.setPassword(simpleHash.toString());
        user.setId(id);
        user.setModifyTime(new Date());
        return ResultUtil.success(service.update(user));
    }
    
}